#ifndef ENGINE_GLUTWINDOW_IMPLEMENTATION_H__
#define ENGINE_GLUTWINDOW_IMPLEMENTATION_H__

#include "WindowInterface.h"



/**
 * Janela usada para renderização da cena e tratamento de inputs do jogo.
 *
 * @see JanelaFactory
 */
class GlutWindow : public WindowInterface
{
public:


	/**
	 * Construtor.
	 */
	GlutWindow( const WindowSettings& settings );

	/**
	 * Destrutor: é importante que seja virtual, pois essa classe é abstrata
	 */
	virtual ~GlutWindow(void);


	/**
	 * Inicia o laço de renderização e de tratamento de eventos dessa janela
	 */
	virtual void startRendering(void);

	/**
	 * Troca os buffers, forçando o OpenGL a exibir o resultado do quadro.
	 */
	virtual void swapBuffers(void);

protected:

	static void keyboardFunc( unsigned char key, int x, int y );
	static void keyboardUpFunc( unsigned char key, int x, int y );
	static void reshapeFunc( int w, int h );
	static void displayFunc(void);
	static void idleFunc(void);

	typedef std::map<unsigned char, WindowInterface::KeyCode> ReverseKeyMap;
	ReverseKeyMap reverseKeyMap;

};


#endif /* ENGINE_GLUTWINDOW_IMPLEMENTATION_H__ */
